#ifndef __VCNL4000_H
#define __VCNL4000_H

#include "sys.h"
#include "STRING.H"
#define VCNL4200 1
#if VCNL4200
// #include "i2c.h"
// #include "delay.h"

// 定义端口
sbit I2C_SCLDATA_PORT = P2 ^ 2; // SCL端口数值引脚定义，注意引脚的数字IO口属性修改
sbit I2C_SDADATA_PORT = P2 ^ 3; // SDA端口数值引脚定义，注意引脚的数字IO口属性修改
// sbit I2C_INT_PORT = P2 ^ 7;     // INT端口数值引脚定义，注意引脚的数字IO口属性修改

    //-----------寄存器------------共有12个，下面为常用-------------------------------------------------------|
    #define VCNL4200_ALSCONF  0x00 // ALS_CONF
    #define VCNL4200_PSCONF  0x03 // PS_CONFIG(重要)
    #define VCNL4200_PSCONF2 0x04 // PS_CONFIG2
    #define VCNL4200_PSCANC  0x05 // PS cancellation level setting
    #define VCNL4200_PSTHDL  0x06 // PS low interrupt threshold setting
    #define VCNL4200_PSTHDH  0x07 // PS high interrupt threshold setting
    #define VCNL4200_PSDATA  0x08 // PS output data
    #define VCNL4200_ALSDATA  0x09 // ALS output data
    // #define	VCNL4200_PROX_HSB	0x87	//VCNL proximity measurement result HSB		 **
    // #define	VCNL4200_PROX_LSB	0x88	//VCNL proximity measurement result LSB		 **

    //-----------命令------------------------------------------------------------------------------------------|
    #define VCNL4200_Write   0xA2 // 写命令
    #define VCNL4200_Read    0xA3 // 读命令
// #define VCNL4200_MODE_PROX	0x88	//PROX_OD=1开始近距离测量（1-200mm）
// #define	VCNL4200_MODE_ALS	0x90	//ALS(Ambient Light Sensor),ALS_OD=1，开始环境光测试

extern u16 VCNL4200_ALS_Result;  // ALS的测量结果
extern u16 VCNL4200_PROX_Result; // PROX的测量结果
extern u8 VCNL4200_Register[12]; // VCNL4200的12个寄存器的值

void VCNL4200_Init(void); // 初始化VCNL的引脚
u8 VCNL4200_ReadID(void);
void VCNL4200_StartMeasure(u8 mode);
void VCNL4200_ReadOneWords(u8 ReadAddr, u8* databuf);       // 读出一个字节从VCNL4200中指定的地址
void VCNL4200_ReadAllRegisters(u8* RegisterBuf);            // 读出12个寄存器的值
void VCNL4200_WriteOneWords(u8 WriteAddr, u8* DataToWrite); // 写入一个字节到VCNL4200中指定的地址

void VCNL4200_Measurement(u16 ProxResult, u16 ALSResult);

void VCNL4200_StartMeasurement(void);
void VCNL4200_MeasurementResult(u8* ProxResult); // 获取测量结果
#endif
#endif
